import { axiosWithAuth } from '../api/interceptors.ts';

export interface IShift {}

export interface IEmployee {
  id: number;
  name: string;
  login: string;
  status: string;
  group: string;
  shifts: IShift[];
}

export enum EmployeeRole {
  ADMIN = 1,
  WAITER,
  COOK,
}

export interface IEmployeeForm extends Pick<IEmployee, 'name' | 'login'> {
  password: string;
  role_id: EmployeeRole;
}

/**
 * Этот сервис отвечает за весь функционал админа.
 */
export class AdminService {
  private static BASE_URL = '/user';

  /** Возвращает список всех сотрудников. */
  static async getList() {
    const response = await axiosWithAuth.get<{ data: IEmployee[] }>(
      this.BASE_URL,
    );
    return response.data;
  }

  /** Создает нового сотрудника/ */
  static createEmployee(data: IEmployeeForm) {
    return axiosWithAuth.post(this.BASE_URL, data);
  }

  /** Возвращает одного сотрудника по ID. */
  static async getOneById(id: number) {
    const response = await axiosWithAuth.get<{ data: IEmployee }>(
      `${this.BASE_URL}/${id}`,
    );
    return response.data;
  }

  /** Увольняет одного сотрудника по ID. */
  static dismiss(id: number) {
    return axiosWithAuth.get<IEmployee>(`${this.BASE_URL}/${id}/to-dismiss`);
  }
}
